package com.huida.app.hutoolsusage;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author wangzhuangzhuang
 * @DESC: 身份证工具
 * @date 2022-01-11 10:02
 *
 * 在日常开发中，我们对身份证的验证主要是正则方式（位数，数字范围等），
 * 但是中国身份证，尤其18位身份证每一位都有严格规定，并且最后一位为校验位。
 * 而我们在实际应用中，针对身份证的验证理应严格至此。于是IdcardUtil应运而生。
 */

@SpringBootTest
public class IdCardUtil {

	// IdcardUtil 支持大陆15位、18位身份证，港澳台10位身份证

	/**
	 * 工具中主要方法包括：
	 * 1. isValidCard 验证身份证是否合法
	 * 2. convert15To18 身份证15位转18位
	 * 3. getBirthByIdCard 获取生日
	 * 4. getAgeByIdCard 获取年龄
	 * 5. getYearByIdCard 获取生日年份
	 * 6. getMonthByIdCard 获取生日月份
	 * 7. getDayByIdCard 获取生日天份
	 * 8. getGenderByIdCard 获取性别
	 * 9. getProvinceByIdCard 获取省份
	 * */

	@Test
	public void test(){
		String ID_18 = "321083197812162119";

		String ID_15 = "150102880730303";

		// 是否有效
		boolean valid = IdcardUtil.isValidCard(ID_18);
		Console.log("valid: " + valid); // valid: true
		boolean valid15 = IdcardUtil.isValidCard(ID_15);
		Console.log("valid15: " + valid15); // valid15: true
		// 转换
		String convert15To18 = IdcardUtil.convert15To18(ID_15);
		Assert.assertEquals(convert15To18, "150102198807303035");

		// 年龄
		DateTime date = DateUtil.parse("2017-04-10");

		int age = IdcardUtil.getAgeByIdCard(ID_18, date);
		Assert.assertEquals(age, 38);

		int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
		Assert.assertEquals(age2, 28);

		// 生日
		String birth = IdcardUtil.getBirthByIdCard(ID_18);
		System.out.println("birth: " + birth); // birth: 19781216

		String birth2 = IdcardUtil.getBirthByIdCard(ID_15);
		System.out.println("birth2: " + birth2); // birth2: 19880730

		// 省份
		String province = IdcardUtil.getProvinceByIdCard(ID_18);
		System.out.println("province: " + province); // province: 江苏

		String province2 = IdcardUtil.getProvinceByIdCard(ID_15);
		System.out.println("province2: " + province2); // province2: 内蒙古
	}


	@Test
	public void test02(){
		JSONObject jsonObject = JSONUtil.createObj()
				.put("a", "value01")
				.put("b", "value02")
				.put("c", "value03");
	}

}